import React from 'react';
import ReactDOM from 'react-dom';
class App extends React.Component {

}
// 里氏替换原则：传父类的地方也可以传子类 App子类、React.Component是父类
let element = React.createElement(App);


//当你定义一个类的时候，会得到二个类型 1 类的类型 2.类的原型 的类型或者 说实例的类型
class MyApp {
    constructor(){}
    static age: number;
    // getName() {

    // }
}
/* let my = new MyApp();
// 1.类的类型
let m: MyApp = my;
// 2.类的原型
let n: typeof MyApp = { new(): MyApp, age: number, }; 
*/




let n = MyApp
type P =  typeof MyApp 
let p:P =MyApp

// 关于typeof 类的讲解
// https://www.tslang.cn/docs/handbook/classes.html

// typeof 操作符可以用来获取一个变量或对象的类型。
interface Person {
    name: string;
    age: number;
}
const sem: Person = { name: "semlinker", age: 30 };
// typeof sem：会获取到sem的类型，最后实际是这样的：type Sem = Person
type Sem = typeof sem; 



// keyof获取layoutType的所有key，当作联合属性
const layout = {
labelCol: { span: 6 },
wrapperCol: { span: 16 },
}
type layoutType = typeof layout
// test:"labelCol" | "wrapperCol"
const test: keyof layoutType = 'labelCol'


class Animal {

}
class Dog extends Animal {

}
function getName(animal: Animal) {

}
getName(new Dog());